iT邦幫忙

第 11 屆 iThome 鐵人賽

DAY 1
0
自我挑戰組

非本科系也能懂和該懂得作業系統系列 第 1

Day 1 - 你敢知影為啥物要學作業系統

  • 分享至 

  • xImage
  •  

各位好,我想先向大家介紹一下我自己的背景,也說明一下我想寫這個主題的動機。

首先,我並非本科系出生,在我大學期間念的科系是土木工程,擅長的是力學和工程製圖,之後在學生時代輾轉寫了網頁遊戲、演算法的運用和物理引擎,目前在一間不大不小的新創公司中擔任後端工程師的職位,每天做的事情不外乎就是解解bug、考古、重構前人留下來的歷史遺跡和開發新的功能,不亦樂乎。

很多人都覺得作業系統這個科目不重要,畢竟太過底層與抽象,作業系統之上有軟體、有框架都已幫我們把這些包得好好的,更別提到現在的雲端服務厲害到在界面上點個幾下就能自己長出伺服器和服務,甚至還有無伺服器(serverless),連機器都不用維護的趨勢。

約莫半年前剛退伍出來找工作時,我以「演算法工程師」與「後端工程師」為目標,面試了某一間技術力很強的公司,我也不害躁的在這邊承認當初被電得慘兮兮,尤其才面到同樣職位的工程師,就被問了好幾個很犀利的問題像是「解釋一下同一支程式在多個執行緒執行下記憶體的分配」、「什麼是Race Condition且如何避免」、「說明Event Loop」,最後得到的評價是技術能力有待加強,雖然不甘心自覺不像他們說得那麼弱,但卻如他們所說關於底層的知識不夠充足,很多主題只懂一半,懂應用,卻不懂這樣的表現是如何實作,未來難免採坑。

該公司的技術長跟我說,要成為一名工程師不難,但難在如何成為一名頂尖的工程師,要顧慮資安上的攻擊(security)、考量效能的問題(performance)、系統的擴充性(scable)、穩定度(reliability)等主題,除了在實戰上累積經驗以外,還需要足夠的知識去支撐,程式運行的邏輯能懂,程式運行的背景更需要理解,才能夠達到知其然亦知其所以的境界。當然所謂足夠的知識絕對不止作業系統這一科目,但也是因此在我心裡種下一定要好好學會作業系統的種子。

由於並非本科系出生,我剛接觸電腦科學這一塊就是開始硬幹C++,在寫過不少程式、應用、軟體後才往下來學習作業系統,我覺得非常的有趣,有趣的是有點像是在學習科普知識的感覺,也對寫出來的程式碼有更多的熟悉和親切感,有種在對程式碼說「哈哈我現在知道你們是怎麼樣被執行了」的感覺,尤其在工作後發現非本科系當工程師的比例蠻高的,期望自己能把這一系列的文章寫的老嫗能解,讓所有不論是本科系還是非本科系的人都能以一個輕鬆卻又有所學習的角度來科普作業系統這個科目,如果你跟我一樣是半路出師的Programmer,希望能給予在未來遇到關聯的情況時,可以想到底層的實作,讓寫的程式時有所改變,那就代表我成功了;那如果已經是大師級的就當做複習,甚至是來校正我的錯誤也十分歡迎。

最後總結我這三十天想讓讀者所體會的目標:

  1. 改變程式碼的寫法、架構甚至風格 - 程式時會聯想到OS的反應,間接思考到效能。
  2. 在使用第三方功能和服務時,更明白為何如此設計 - 能避免掉一些可能會浪費你一整天,或者燒掉公司好幾萬的坑
  3. 下次面試換你電別人

下一篇
Day 2 - 給伊自己的三十天挑戰
系列文
非本科系也能懂和該懂得作業系統30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言